home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 004 / convert.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1985-08-05  |  2.0 KB  |  66 lines

  1. 10  'NUMERIC BASE CONVERSION
  2. 20  'WITH ASSISTANCE FROM NATIONAL BUREAU OF STANDARDS `HANDBOOK OF
  3. 30  'OF MATHMETICAL FUNCTIONS.'
  4. 40  'CONVERTED TO PC BASIC BY D. WATKINS 9/28/82
  5. 50  CLS
  6. 60  KEY OFF
  7. 70  LOCATE 2,21:PRINT "NUMERIC BASE CONVERSION PROGRAM"
  8. 80  DIM V$(20)
  9. 90  N$="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  10. 100  'VARIABLE `M' IS THE HIGHEST
  11. 110  'BASE YOU MAY CONVERT FROM / TO
  12. 120  M=LEN(N$)
  13. 130  LOCATE 10,1 :PRINT "CONVERT NUMBERS FROM BASE:":PRINT "    Input a base between 2 and 36 (or 0 TO Exit)  ";
  14. 140  INPUT B1
  15. 150  'END PROGRAM?
  16. 160  IF B1=0 THEN 240
  17. 170  'TEST FOR VALID INPUT BASE
  18. 180  IF B1>1 THEN 210
  19. 190  PRINT "BASES 2 THROUGHT";M;"ONLY. SELECT AGAIN."
  20. 200  GOTO 130
  21. 210  IF B1>M THEN 190
  22. 220  PRINT :PRINT "                  TO BASE:":PRINT "    Input a base between 2 and 36 (or 0 TO Exit)  ";
  23. 230  INPUT B2
  24. 240  IF B1=0 OR B2=0 THEN CLS :LOCATE 12,27 :PRINT "Program end.": END
  25. 250  'TEST FOR VALID OUTPUT BASE
  26. 260  IF B2>1 THEN 290
  27. 270  PRINT "BASES 2 THROUGH ";M;"ONLY. SELECT AGAIN."
  28. 280  GOTO 220
  29. 290  IF B2>M THEN 270
  30. 300  CLS
  31. 310  LOCATE 3,23:PRINT "NUMERIC BASE CONVERSION PROGRAM":PRINT
  32. 320  LOCATE 11,1 :PRINT TAB(23);"From";TAB(58);"To"
  33. 330  CSR=14 :LOCATE 12,1 :PRINT TAB(22);"BASE";B1;TAB(56);"BASE";B2 :LOCATE 6,1
  34. 340  LOCATE 5,14 :PRINT "( Use any of these digits: "; MID$(N$,1,B1);" )"
  35. 345  LOCATE 6,30 :PRINT "( END TO Exit )"
  36. 350  LOCATE 8,1 :PRINT "Number in Base";B1;"to convert to a number in Base";B2 ;" "; :INPUT V$
  37. 360  FOR I=5 TO 9 :LOCATE I,1: PRINT SPACE$(80) : NEXT
  38. 365  IF MID$(V$,1,3)="END" THEN B1=0 :GOTO 240
  39. 370  IF MID$(V$,1,1)="0" THEN GOTO 340
  40. 380  'FIRST, CONVERT INPUT VALUE TO BASE 10
  41. 390  L=LEN(V$)
  42. 400  D=0:BAD=0
  43. 410  FOR I = 1 TO L
  44. 420  FOR J = 1 TO B1
  45. 430  IF MID$(V$,I,1)>MID$(N$,B1,1) THEN BAD =-1
  46. 440  IF MID$(N$,J,1)<>MID$(V$,I,1) THEN 460
  47. 450  D=D+INT((J-1)*(B1^(L-I))+0.5)
  48. 460  NEXT J
  49. 470  NEXT I
  50. 480  IF BAD THEN 600
  51. 490  'NOW CONVERT BASE 10 VALUE TO
  52. 500  'DESIRED OUTPUT BASE
  53. 510  O$=""
  54. 520  X=INT(((D/B2)-INT(D/B2))*B2+1.5)
  55. 530  O$=MID$(N$,X,1)+O$
  56. 540  D=INT(D/B2)
  57. 550  IF D>0 THEN 520
  58. 560  'OUTPUT THE RESULT
  59. 570  LOCATE CSR,1 :PRINT TAB(29-LEN(V$));V$;TAB(62-LEN(O$));O$ :CSR=CSR+1
  60. 580  'LOOP BACK TO ENTER ANOTHER VALUE
  61. 590  GOTO 340
  62. 600  CLS :LOCATE 6,4 :PRINT "INVALID ENTRY:"
  63. 610  PRINT "THERE IS NO SUCH NUMBER `"V$"' (SIC) IN BASE"B1
  64. 620  GOTO 310
  65. 630  END
  66.